package com.mmq.ets.visuel;
/******************************************************
Cours:  LOG121
Projet: Squelette du laboratoire #1
Nom du fichier: MenuFenetre.java
Date créé: 2013-05-03
*******************************************************
Historique des modifications
*******************************************************
*@author Patrice Boucher
2013-05-03 Version initiale
*******************************************************/  

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import com.mmq.ets.controleur.ControleurFrontal;
import com.mmq.ets.util.Labo2Const;
import com.mmq.ets.util.LangueConfig;

/**
 * Crée le menu de la fenêtre de l'applicationé
 */
public class MenuFenetre extends JMenuBar{
	
	private static final long serialVersionUID = 1536336192561843187L;
//	private static final int  MENU_DESSIN_ARRETER_TOUCHE_MASK  = ActionEvent.CTRL_MASK;
//	private static final char MENU_DESSIN_ARRETER_TOUCHE_RACC  = KeyEvent.VK_A;
//	private static final int  MENU_DESSIN_DEMARRER_TOUCHE_MASK = ActionEvent.CTRL_MASK;
//	private static final char MENU_DESSIN_DEMARRER_TOUCHE_RACC = KeyEvent.VK_D;
	private static final int  MENU_FICHIER_QUITTER_TOUCHE_MASK = ActionEvent.CTRL_MASK;
	private static final char MENU_FICHIER_QUITTER_TOUCHE_RACC = KeyEvent.VK_Q;
	private static final String
		    
			MENU_FICHIER_TITRE = "app.frame.menus.file.title",
			MENU_FICHIER_GET_SHAPES = "app.frame.menus.file.getShapes",
			MENU_ORDRE_TITRE = "app.frame.menus.order.title",
			MENU_ORDRE_CROISSANT = "app.frame.menus.order.ascending",
			MENU_ORDRE_DECROISSANT = "app.frame.menus.order.descending",
			MENU_ORDRE_NO_ORDER="app.frame.menus.order.noOrder",
			MENU_ORDRE_BY_NSEQ="app.frame.menus.order.ascDesc.Nseq",
			MENU_ORDRE_BY_AREA="app.frame.menus.order.ascDesc.Area",
		    MENU_ORDRE_BY_TYPE="app.frame.menus.order.ascDesc.Type",
		    MENU_ORDRE_BY_MAXDIS="app.frame.menus.order.ascDesc.MaximumDistance",
		    MENU_ORDRE_BY_HEIGHT="app.frame.menus.order.ascDesc.Height",
		    MENU_ORDRE_BY_WIDTH="app.frame.menus.order.ascDesc.Width",
			MENU_AIDE_TITRE = "app.frame.menus.help.title",
			MENU_AIDE_PROPOS = "app.frame.menus.help.about";
	
	//private JMenuItem arreterMenuItem, demarrerMenuItem; 	   
	private ControleurFrontal monControleur; //Pour gére les événements des boutons
	/**
	 * Constructeur
	 */
	public MenuFenetre(ControleurFrontal controleur) 
	{
		this.monControleur=controleur;
		addMenuFichier();
		addMenuOrdre();
		addMenuAide();
	}
/**
 * Pour rafraichir les boutons avec l'état de la connexion
 */	
	@Override
	public void paint(Graphics arg0) 
	{
		super.paint(arg0);
	}

	/**
	 *  Créer le menu "Order". 
	 */
	protected void addMenuOrdre() 
	{
		// TODO: Finir cette merde =)
		
		JMenu menu = creerMenu(MENU_ORDRE_TITRE);
		JMenu sousMenuCroissant=creerMenu(MENU_ORDRE_CROISSANT,new String[]{MENU_ORDRE_BY_NSEQ,MENU_ORDRE_BY_AREA,MENU_ORDRE_BY_TYPE,MENU_ORDRE_BY_MAXDIS,MENU_ORDRE_BY_HEIGHT,MENU_ORDRE_BY_WIDTH});
		JMenu sousMenuDecroissant=creerMenu(MENU_ORDRE_DECROISSANT,new String[]{MENU_ORDRE_BY_NSEQ,MENU_ORDRE_BY_AREA,MENU_ORDRE_BY_TYPE,MENU_ORDRE_BY_MAXDIS,MENU_ORDRE_BY_HEIGHT,MENU_ORDRE_BY_WIDTH});
		JMenuItem sousMenuSansOrdre=new JMenuItem(LangueConfig.getResource(MENU_ORDRE_NO_ORDER));
		sousMenuCroissant.getItem(0).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_NSEQ_CROISSANT);	
			}
		});
		sousMenuCroissant.getItem(1).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_AREA_CROISSANT);	
			}
		});
		sousMenuCroissant.getItem(2).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_TYPE_CROISSANT);	
			}
		});
		sousMenuCroissant.getItem(3).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_MAXDIS_CROISSANT);	
			}
		});
		sousMenuCroissant.getItem(4).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_HAUTEUR_CROISSANT);	
			}
		});
		sousMenuCroissant.getItem(5).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_LARGEUR_CROISSANT);	
			}
		});
		sousMenuDecroissant.getItem(0).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_NSEQ_DECROISSANT);	
			}
		});
		sousMenuDecroissant.getItem(1).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_AREA_DECROISSANT);	
			}
		});
		sousMenuDecroissant.getItem(2).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_TYPE_DECROISSANT);	
			}
		});
		sousMenuDecroissant.getItem(3).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_MAXDIS_DECROISSANT);	
			}
		});
		sousMenuDecroissant.getItem(4).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_HAUTEUR_DECROISSANT);	
			}
		});
		sousMenuDecroissant.getItem(5).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.ActionTrier.TRIER_PAR_LARGEUR_DECROISSANT);	
			}
		});
		sousMenuSansOrdre.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) 
			{
				monControleur.faireAction(Labo2Const.Actions.AFFICHER_FORMES);
				System.out.println("aqui");
			}
		});
		menu.add(sousMenuCroissant);
		menu.add(sousMenuDecroissant);
		menu.add(sousMenuSansOrdre);
		add(menu);
	}

	/** 
	 * Créer le menu "File". 
	 */
	protected void addMenuFichier() {
		JMenu menu = creerMenu(MENU_FICHIER_TITRE, new String[] { MENU_FICHIER_GET_SHAPES });
		menu.getItem(0).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				monControleur.faireAction(Labo2Const.Actions.AFFICHER_DIALOGUE_CONNEXION);
			 
			}
		});
		menu.getItem(0).setAccelerator(
				KeyStroke.getKeyStroke(MENU_FICHIER_QUITTER_TOUCHE_RACC,
						MENU_FICHIER_QUITTER_TOUCHE_MASK));
		add(menu);
	}

	/**
	 *  Créer le menu "Help". 
	 */
	private void addMenuAide() {
		JMenu menu = creerMenu(MENU_AIDE_TITRE, new String[] { MENU_AIDE_PROPOS });
		menu.getItem(0).addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				monControleur.faireAction(Labo2Const.Actions.AFFICHER_AIDE);
	
			}
		});
		add(menu);
	}



	
	/**
	 * Créer un élément de menu à partir d'un champs principal et ses éléments
	 * @param titleKey champs principal
	 * @param itemKeys éléments
	 * @return le menu
	 */
	private static JMenu creerMenu(String titleKey,String[] itemKeys) {
        JMenu menu = new JMenu(LangueConfig.getResource(titleKey));
        for(int i=0; i < itemKeys.length; ++i) {
           menu.add(new JMenuItem(LangueConfig.getResource(itemKeys[i])));
        }
        return menu;
   }
	private static JMenu creerMenu(String titleKey) {
        JMenu menu = new JMenu(LangueConfig.getResource(titleKey));
       return menu;
   }
}
